package com.example.demo.study.account;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

// 账户管理器
public class AccountManager {
    private List<Account> records; // 存储账目记录
    private int nextId; // 下一个可用ID
    private Scanner scanner; // 用于接收用户输入

    public AccountManager() {
        // 初始化账户管理器
        records = new ArrayList<>();
        nextId = 1;
        scanner = new Scanner(System.in);
    }
    // 添加账目记录
    public void addAccountRecord() {
        System.out.println("\n============添加新记录============");
        // 日期
        LocalDate date = inputDate("请输入日期（格式：YYYY-MM-DD）：");

        // 金额
        double amount = inputAmount("请输入金额：");

        // 用途
        System.out.println("请输入用途：");
        String category = scanner.nextLine();
        // 备注
        System.out.println("请输入备注：");
        String remark = scanner.nextLine();

        // 创建新的账目记录
        Account account = new Account(nextId++, date, amount, category, remark);
        records.add(account);
        System.out.println("记录已添加。id:"+account.getId());
    }
    // 删除
    public void deleteAccountRecord() {
        System.out.println("\n============删除记录============");
        // 输入要删除的记录ID
        int id = inputId("请输入要删除的记录ID：");

        Account account = findAccountById(id);
        if(account != null){
            records.remove(account);
            System.out.println("记录已删除。id:"+account.getId());
        }else{
            System.out.println("未找到该记录。");
        }
        // 遍历账目记录列表，找到要删除的记录
    }
    // 修改
    public void updateAccountRecord() {
        System.out.println("\n============修改记录============");
        // 输入要修改的记录ID
        int id = inputId("请输入要修改的记录ID：");

        Account account = findAccountById(id);
        if(account == null){
            System.out.println("未找到该记录。");
        }
        System.out.println("当前记录信息："+ account);
        LocalDate date = inputDate("请输入日期（格式：yyyy-MM-dd）：");
    }
    // 查询
    public void queryAccountRecord() {
        System.out.println("\n============查询记录============");
        // 输入要查询的记录ID
        int id = inputId("请输入要查询的记录ID：");
        Account account = findAccountById(id);
        if(account != null){
            System.out.println(account);
        }else{
            System.out.println("未找到该记录。");
        }
        // 遍历账目记录列表，找到要查询的记录
    }

    private Account findAccountById(int id) {
        System.out.println("\n============查找记录============");
        for (Account account : records) {
            if (account.getId() == id) {
                return account;
            }
        }
        System.out.println("未找到ID为" + id + "的记录。");
        return null;
    }

    private int inputId(String prompt) {
        while (true){
            try {
                System.out.println(prompt);
                return Integer.parseInt(scanner.nextLine());
            }catch (NumberFormatException e){
                System.out.println("输入无效，请输入一个整数。");
                continue;
            }
        }
    }

    private double inputAmount(String prompt) {
        while (true){
            try {
                System.out.println(prompt);
                double amount = scanner.nextDouble();
                scanner.nextLine(); // 清除输入缓冲区中的换行符
                return amount;
            }catch (Exception e){
                System.out.println("输入格式错误，请重新输入。");
            }
        }

    }

    private LocalDate inputDate(String prompt) {
        System.out.println(prompt);
        String dateStr = scanner.nextLine();
        if(dateStr.isEmpty()) return null;
        try {
            return LocalDate.parse(dateStr, DateTimeFormatter.ISO_LOCAL_DATE);
        }catch (Exception e){
            System.out.println("日期格式错误，请重新输入。");
            return LocalDate.now();
        }
    }

    // ...
}
